<?php

class Usuario {
    private $id;
    private $nome;
    private $email;
    private $senha;
    private $dataInclusao;
    
    /** nome dado a sessão que um usuario representa dentro do array $_SESSION */
    const NOME_SESSAO = "login";
    const NOME_MODULO = "Usuario";
    
    public function getId() {
        return $this->id;
    }
    public function setId($id) {
        $this->id = $id;
    }   
    public function getNome() {
        return $this->nome;
    }
    public function setNome($nome) {
        $this->nome = $nome;
    }
     public function getEmail() {
        return $this->email;
    }
    public function setEmail($email) {
        $this->email = $email;
    }
    public function getSenha() {
        return $this->senha;
    }
    public function setSenha($senha) {
        $this->senha = $senha;
    }
    public function getDataInclusao() {
        return $this->dataInclusao;
    }
    public function setDataInclusao($dataInclusao) {
        $this->dataInclusao = $dataInclusao;
    }    
    /**
     * Cria sessao com base no login e senha passados
     * @param type $login 
     * @param type $senha
     * @return bool true se a sessão foi criada e false se não 
     */
    public static function criaSessao($usuario, $senha){
        
        $conn = Connection::getConnection();
        $rs = $conn->prepare("SELECT 1 FROM usuario WHERE email = ? AND senha = ?");
        $rs->bind_param("ss", $usuario, $senha);
        
        $rs->execute();
        if($rs->fetch()){
           session_start();
	   	   $_SESSION[Usuario::NOME_SESSAO] = $usuario;
           return true;
        }else{
            return false;
        }
    }
    public static function encerraSessao(){
        
        session_start();   
        session_unset();
        session_destroy();

    }
    /**
     * Retorna uma lista de usuarios
     * @return Usuario[] usuarios 
     */
    public static function listar(){
        $usuarios = array();
        $conn = Connection::getConnection();
                
        $rs = $conn->query("SELECT * FROM usuario");
        
        while($linha = $rs->fetch_assoc()){
            $usuarios[] = self::arrayParaUsuario($linha);
        }
        return $usuarios;
    }
    /**
     * Retorna um usuario conforme o id passado
     * @param int id
     * @return Usuario 
     */
    public static function consultar($id){
        $usuario = null;
        $conn = Connection::getConnection();
        
        $rs = $conn->query("SELECT * FROM usuario WHERE idUsuario = $id");
        
        $linha = $rs->fetch_assoc();
        //se foi encontrado o registro
        if($linha){
           $usuario = self::arrayParaUsuario($linha);
        }
        return $usuario;
    }
    public function alterar(){
            $conn = Connection::getConnection();

            $rs = $conn->prepare("UPDATE usuario SET nome = ?, email = ?, senha = ? WHERE idUsuario = ?");
            $rs->bind_param("sssi", $this->nome, $this->email, $this->senha, $this->id);
                            
            return $rs->execute();
    }
    public function inserir(){
            $conn = Connection::getConnection();
		
            $rs = $conn->prepare("INSERT INTO usuario SET nome = ?, email = ?, senha = ?, dt_inclusao = ?");
			$rs->bind_param("ssss", $this->nome, $this->email, $this->senha,
                                Util::dataViewParaBanco($this->dataInclusao));
              
            return $rs->execute();       
    }
    public function excluir($id){
            $conn = Connection::getConnection();

            $rs = $conn->prepare("DELETE FROM usuario  WHERE idUsuario= ?");
            $rs->bind_param("d", $id);
            
            return $rs->execute();

    }
    public static function obtemUsuarioPorEmail($email){
        $conn = Connection::getConnection();
        
        $rs = $conn->query("SELECT * FROM usuario WHERE email = '$email'");
        
        $linha = $rs->fetch_assoc();
        if($linha){
           $usuario = self::arrayParaUsuario($linha);
        }
        
        return $usuario;
    }


    /**
     * Tranforma a linha de uma consulta na tabela usuario em um objeto usuario
     * @param type $linha linha de uma consulta a tabela usuario
     */
    public static function arrayParaUsuario($linha){
        $usuario = new Usuario();
        $usuario->id = isset($linha["idUsuario"]) ? $linha["idUsuario"] : null;
        $usuario->nome = isset($linha["nome"]) ? $linha["nome"] : null;
        $usuario->senha = isset($linha["senha"]) ? $linha["senha"] : null;
        $usuario->email = isset($linha["email"]) ? $linha["email"] : null;
        $usuario->dataInclusao = isset($linha["dt_inclusao"]) ? $linha["dt_inclusao"] : null;
        return $usuario;
    }
}

?>
